#include "tfBondInfo.h"
#include "bondlib/BondField/CBondInfoImpl.h"
#include "bondlib/BondContainer.h"

//////////////////////////////////////////////////////////////////////
//	class	CBondData

// double CBondData::GetReportFactor( int nReportType )
// {
// 	double	factor	=	1;
// 	if( CBondData::reportQuarter == nReportType )
// 		factor	=	4;
// 	else if( CBondData::reportMid == nReportType )
// 		factor	=	2;
// 	else if( CBondData::reportQuarter3 == nReportType )
// 		factor	=	1.333333;
// 	return factor;
// }
// 
// CBondData::CBondData()
// {
// 	m_pDatabase	=	NULL;
// 
// 	SetKDataTypes( );
// 	SetLastTime( );
// 	SetNetStatus( );
// }
// 
// CBondData::CBondData( CStDatabase * pDatabase )
// {
// 	Q_ASSERT( pDatabase );
// 	m_pDatabase	=	pDatabase;
// 
// 	SetKDataTypes( );
// 	SetLastTime( );
// 	SetNetStatus( );
// }
// 
// CBondData::CBondData( CStDatabase * pDatabase, const char * code )
// {
// 	Q_ASSERT( pDatabase );
// 	m_lastdate = 0;
// 	m_pDatabase	=	pDatabase;
// 	m_bondinfo.SetBondCode( code );
// 
// 	SetKDataTypes( );
// 	SetNetStatus( );
// }
// 
// CBondData::~CBondData()
// {
// 	Clear( );
// }
// 
// void CBondData::SetKDataTypes( )
// {
// 	m_kdYear.SetKType( CKData::ktypeYear );
// 	m_kdMonth.SetKType( CKData::ktypeMonth );
// 	m_kdWeek.SetKType( CKData::ktypeWeek );
// 	m_kdDay.SetKType( CKData::ktypeDay );
// 	m_kdMin60.SetKType( CKData::ktypeMin60 );
// 	m_kdMin30.SetKType( CKData::ktypeMin30 );
// 	m_kdMin15.SetKType( CKData::ktypeMin15 );
// 	m_kdMin5.SetKType( CKData::ktypeMin5 );
// }
// 
// void CBondData::SetDatabase( CStDatabase * pDatabase )
// {
// 	m_pDatabase	=	pDatabase;
// }
// 
// CStDatabase * CBondData::GetDatabase( )
// {
// 	return m_pDatabase;
// }
// 
// void CBondData::SetFutureCode( const char *szTFCode )
// {
// 	if( m_futureinfo.IsEqualTo(szTFCode) )
// 		return;
// 
// 	Clear();
// 	m_futureinfo.SetFutureCode(szTFCode);
// }
// 
// const char * CBondData::GetFutureCode( )
// {
// 	return m_futureinfo.GetFutureCode();
// }
// 
// bool CBondData::SetFutureInfo( CFutureInfo * pTFInfo )
// {
// 	if( NULL == pTFInfo )
// 	{
// 		Clear();
// 		return false;
// 	}
// 	if( m_futureinfo.IsEqualTo( pTFInfo->GetFutureCode() ) )
// 	{
// 		m_futureinfo	=	*pTFInfo;
// 		return m_futureinfo.IsValidFuture( );
// 	}
// 	Clear();
// 	m_futureinfo	=	*pTFInfo;
// 	return m_futureinfo.IsValidFuture( );
// }
// 
// CFutureInfo & CBondData::GetFutureInfo( )	{	return m_futureinfo;	}
// 
// void CBondData::SetBondCode( const char *szCode, const char* szListedMarket )
// {
// 	if( m_bondinfo.IsEqualTo(szCode, szListedMarket) )
// 		return;
// 
// 	Clear();
// 	m_bondinfo.SetBondCode(szCode);
// }
// 
// const char * CBondData::GetBondCode( )
// {
// 	return m_bondinfo.GetBondCode();
// }
// 
// bool CBondData::SetBondInfo( CBondInfo * pInfo )
// {
// 	if( NULL == pInfo )
// 	{
// 		Clear();
// 		return false;
// 	}
// 	if( m_bondinfo.IsEqualTo( pInfo->GetBondCode(), pInfo->GetListedMarket()) )
// 	{
// 		m_bondinfo	=	*pInfo;
// 		return m_bondinfo.IsValidBond( );
// 	}
// 	Clear();
// 	m_bondinfo	=	*pInfo;
// 	return m_bondinfo.IsValidBond( );
// }
// 
// CBondInfo & CBondData::GetBondInfo( )	{	return m_bondinfo;	}
// 
// CKData	& CBondData::GetKData( int ktype )
// {
// 	switch( ktype )
// 	{
// 	case CKData::ktypeYear:
// 		return GetKDataYear();
// 	case CKData::ktypeMonth:
// 		return GetKDataMonth();
// 	case CKData::ktypeWeek:
// 		return GetKDataWeek();
// 	case CKData::ktypeDay:
// 		return GetKDataDay();
// 	case CKData::ktypeMin60:
// 		return GetKDataMin60();
// 	case CKData::ktypeMin30:
// 		return GetKDataMin30();
// 	case CKData::ktypeMin15:
// 		return GetKDataMin15();
// 	case CKData::ktypeMin5:
// 		return GetKDataMin5();
// 	default:
// 		Q_ASSERT( false );
// 		return GetKDataDay();
// 	}
// }
// CKData	& CBondData::GetKDataYear( )		{	return m_kdYear;	}
// 
// CKData	& CBondData::GetKDataMonth( )		{	return m_kdMonth;	}
// 
// CKData	& CBondData::GetKDataWeek( )		{	return m_kdWeek;	}
// 
// CKData	& CBondData::GetKDataDay( )			{	return m_kdDay;		}
// 
// CKData	& CBondData::GetKDataMin60( )		{	return m_kdMin60;	}
// 
// CKData	& CBondData::GetKDataMin30( )		{	return m_kdMin30;	}
// 
// CKData	& CBondData::GetKDataMin15( )		{	return m_kdMin15;	}
// 
// CKData	& CBondData::GetKDataMin5( )		{	return m_kdMin5;	}
// 
// CKData	& CBondData::GetDRData( )			{	return m_drData;	}
// 
// CBondQuote & CBondData::GetQuote( )		{	return m_bondquote;	}
// 
// CBondReport & CBondData::GetReport( )	{	return m_bondreport;	}
// 
// CBondMinute & CBondData::GetMinute( )		{	return m_bondminute;	}
// 
// int CBondData::PrepareData( int type, int period, bool bReload )
// {
// 	Q_ASSERT( m_pDatabase );
// 	if( ! m_pDatabase )	return 0;
// 
// 	switch( type )
// 	{
// 	case dataInfo:
// 		return CBondContainer::instance().GetBondInfo( m_bondinfo.GetBondCode(), CBondContainer::lmCIB, &m_bondinfo );
// 	case dataK:
// 		{
// 			switch( period )
// 			{
// 			case CKData::ktypeYear:
// 				if( bReload || GetKDataYear().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeYear );
// 				return 0;
// 			case CKData::ktypeMonth:
// 				if( bReload || GetKDataMonth().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeMonth );
// 				return 0;
// 			case CKData::ktypeWeek:
// 				if( bReload || GetKDataWeek().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeWeek );
// 				return 0;
// 			case CKData::ktypeDay:
// 				if( bReload || GetKDataDay().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeDay );
// 				break;		// month, week, and day willnot extract from min60,min30...
// 
// 			case CKData::ktypeMin60:
// 				if( bReload || GetKDataMin60().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeMin60 );
// 				break;
// 			case CKData::ktypeMin30:
// 				if( bReload || GetKDataMin30().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeMin30 );
// 				break;
// 			case CKData::ktypeMin15:
// 				if( bReload || GetKDataMin15().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeMin15 );
// 				break;
// 			case CKData::ktypeMin5:
// 				if( bReload || GetKDataMin5().GetSize() == 0 )
// 					m_pDatabase->LoadKData( this, CKData::ktypeMin5 );
// 				break;
// 			default:
// 				Q_ASSERT( false );
// 				return 0;
// 			}
// 			return ExtractKData( period, true );
// 		}
// 	case dataReport:
// 		if( bReload || GetReport().GetSize() == 0 )
// 			return m_pDatabase->LoadReport( this );
// 		else
// 			return GetReport().GetSize();
// 	case dataQuote:
// 		if( bReload || GetQuote().GetSize() == 0 )
// 			return m_pDatabase->LoadQuote( this );
// 		else
// 			return GetQuote().GetSize();
// 	case dataMinute:
// 		if( bReload || GetMinute().GetSize() == 0 )
// 			return m_pDatabase->LoadMinute( this );
// 		else
// 			return GetMinute().GetSize();
// 	case dataDR:
// 		return GetDRData().GetSize();
// 	default:
// 		Q_ASSERT( false );
// 		return 0;
// 	}
// }
// 
// int CBondData::ExtractKData( int period, bool bForced )
// {
// 	switch( period )
// 	{
// 	case CKData::ktypeYear:
// 		return GetKDataYear().GetSize();
// 	case CKData::ktypeMonth:
// 		{
// 			if( bForced )
// 				return CKData::DayToMonth( GetKDataDay(), GetKDataMonth() );
// 			int compare = GetKDataMonth().CompareLatestDate( GetKDataDay() );
// 			if( -1 == compare )
// 				return CKData::DayToMonth( GetKDataDay(), GetKDataMonth() );
// 			else if( 1 == compare )
// 				return GetKDataMonth().GetSize();
// 			else if( GetKDataMonth().GetSize() * 18 < GetKDataDay().GetSize() )
// 				return CKData::DayToMonth( GetKDataDay(), GetKDataMonth() );
// 			else
// 				return GetKDataMonth().GetSize();
// 		}
// 		break;
// 	case CKData::ktypeWeek:
// 		{
// 			if( bForced )
// 				return CKData::DayToWeek( GetKDataDay(), GetKDataWeek() );
// 			int compare = GetKDataWeek().CompareLatestDate( GetKDataDay() );
// 			if( -1 == compare )
// 				return CKData::DayToWeek( GetKDataDay(), GetKDataWeek() );
// 			else if( 1 == compare )
// 				return GetKDataWeek().GetSize();
// 			else if( GetKDataWeek().GetSize() * 5 < GetKDataDay().GetSize() )
// 				return CKData::DayToWeek( GetKDataDay(), GetKDataWeek() );
// 			else
// 				return GetKDataWeek().GetSize();
// 		}
// 		break;
// 	case CKData::ktypeDay:
// 		return GetKDataDay().GetSize();
// 	case CKData::ktypeMin60:
// 		{
// 			if( bForced )
// 				return CKData::Min5ToMin60( GetKDataMin5(), GetKDataMin60() );
// 			int compare = GetKDataMin60().CompareLatestDate( GetKDataMin5() );
// 			if( -1 == compare )
// 				return CKData::Min5ToMin60( GetKDataMin5(), GetKDataMin60() );
// 			else if( 1 == compare )
// 				return GetKDataMin60().GetSize();
// 			else if( GetKDataMin60().GetSize() * 12 < GetKDataMin5().GetSize() )
// 				return CKData::Min5ToMin60( GetKDataMin5(), GetKDataMin60() );
// 			else
// 				return GetKDataMin60().GetSize();
// 		}
// 		break;
// 	case CKData::ktypeMin30:
// 		{
// 			if( bForced )
// 				return CKData::Min5ToMin30( GetKDataMin5(), GetKDataMin30() );
// 			int compare = GetKDataMin30().CompareLatestDate( GetKDataMin5() );
// 			if( -1 == compare )
// 				return CKData::Min5ToMin30( GetKDataMin5(), GetKDataMin30() );
// 			else if( 1 == compare )
// 				return GetKDataMin30().GetSize();
// 			else if( GetKDataMin30().GetSize() * 6 < GetKDataMin5().GetSize() )
// 				return CKData::Min5ToMin30( GetKDataMin5(), GetKDataMin30() );
// 			else
// 				return GetKDataMin30().GetSize();
// 		}
// 		break;
// 	case CKData::ktypeMin15:
// 		{
// 			if( bForced )
// 				return CKData::Min5ToMin15( GetKDataMin5(), GetKDataMin15() );
// 			int compare = GetKDataMin15().CompareLatestDate( GetKDataMin5() );
// 			if( -1 == compare )
// 				return CKData::Min5ToMin15( GetKDataMin5(), GetKDataMin15() );
// 			else if( 1 == compare )
// 				return GetKDataMin15().GetSize();
// 			else if( GetKDataMin15().GetSize() * 3 < GetKDataMin5().GetSize() )
// 				return CKData::Min5ToMin15( GetKDataMin5(), GetKDataMin15() );
// 			else
// 				return GetKDataMin15().GetSize();
// 		}
// 		break;
// 	case CKData::ktypeMin5:
// 		return GetKDataMin5().GetSize();
// 	default:
// 		Q_ASSERT( false );
// 		return 0;
// 	}
// }
// 
// int CBondData::MergeKData( CBondData &bond, int period )
// {
// 	CKData	* pkdata	=	NULL;
// 	CKData	* pkdata2	=	NULL;
// 	switch( period )
// 	{
// 	case CKData::ktypeMonth:
// 		pkdata	=	&(GetKDataMonth());
// 		pkdata2	=	&(bond.GetKDataMonth());
// 		break;
// 	case CKData::ktypeWeek:
// 		pkdata	=	&(GetKDataWeek());
// 		pkdata2	=	&(bond.GetKDataWeek());
// 		break;
// 	case CKData::ktypeDay:
// 		pkdata	=	&(GetKDataDay());
// 		pkdata2	=	&(bond.GetKDataDay());
// 		break;
// 	case CKData::ktypeMin60:
// 		pkdata	=	&(GetKDataMin60());
// 		pkdata2	=	&(bond.GetKDataMin60());
// 		break;
// 	case CKData::ktypeMin30:
// 		pkdata	=	&(GetKDataMin30());
// 		pkdata2	=	&(bond.GetKDataMin30());
// 		break;
// 	case CKData::ktypeMin15:
// 		pkdata	=	&(GetKDataMin15());
// 		pkdata2	=	&(bond.GetKDataMin15());
// 		break;
// 	case CKData::ktypeMin5:
// 		pkdata	=	&(GetKDataMin5());
// 		pkdata2	=	&(bond.GetKDataMin5());
// 		break;
// 	default:
// 		Q_ASSERT( false );
// 		return 0;
// 	}
// 
// 	return pkdata->MergeKData( pkdata2 );
// }
// 
// void CBondData::SetFRightInfo(const CKTFRightInfo& rightInfo)
// {
// 	m_kdYear.SetFRightInfo(rightInfo);
// 	m_kdMonth.SetFRightInfo(rightInfo);
// 	m_kdWeek.SetFRightInfo(rightInfo);
// 	m_kdDay.SetFRightInfo(rightInfo);
// 	m_kdMin60.SetFRightInfo(rightInfo);
// 	m_kdMin30.SetFRightInfo(rightInfo);
// 	m_kdMin15.SetFRightInfo(rightInfo);
// 	m_kdMin5.SetFRightInfo(rightInfo);
// }
// 
// void CBondData::RemoveFRight()
// {
// 	m_kdYear.RemoveFRight();
// 	m_kdMonth.RemoveFRight();
// 	m_kdWeek.RemoveFRight();
// 	m_kdDay.RemoveFRight();
// 	m_kdMin60.RemoveFRight();
// 	m_kdMin30.RemoveFRight();
// 	m_kdMin15.RemoveFRight();
// 	m_kdMin5.RemoveFRight();
// }
// 
// void CBondData::SetNetStatus( bool bStatus )
// {
// 	m_bStatus = bStatus;
// }
// 
// time_t CBondData::GetLastTime( )
// {
// 	return m_lastdate;
// }
// 
// void CBondData::SetLastTime( time_t lastdate )
// {
// 	m_lastdate = lastdate;
// }
// 
// void CBondData::ClearTf( )
// {
// 	m_bondquote.SetSize( 0 );
// 	m_bondreport.SetSize( 0 );
// 	m_bondminute.RemoveDirty();
// }
// 
// void CBondData::Clear( )
// {
// 	m_bondinfo.Clear( );
// 	m_bondquote.SetSize( 0 );
// 	m_bondreport.SetSize( 0 );
// 	m_bondminute.SetSize( 0 );
// 	m_kdYear.Clear();
// 	m_kdMonth.Clear();
// 	m_kdWeek.Clear();
// 	m_kdDay.Clear();
// 	m_kdMin60.Clear();
// 	m_kdMin30.Clear();
// 	m_kdMin15.Clear();
// 	m_kdMin5.Clear();
// 
// 	SetKDataTypes( );
// 	SetLastTime( );
// }
// 
// bool CBondData::GetNetStatus( )
// {
// 	return m_bStatus;
// }
